<?php namespace Home\Controller;
use Hdphp\Controller\Controller;

class CategoryController extends Controller{
	protected $CategoryModel;
	protected $GoodsModel;
	protected $GoodsAttrModel;
	protected $TypeAttrModel;
	
	
	//构造函数
	public function __init()
	{
		$this->CategoryModel=M('\Common\Model\sc_category');
		$this->GoodsModel=M('\Common\Model\sc_goods');
		$this->GoodsAttrModel=M('\Common\Model\sc_goods_attr');
		$this->TypeAttrModel=M('\Common\Model\sc_typeAttr');
	}
	
	 //动作
    public function index(){

	   //获取全部分类信息
	   $data=$this->CategoryModel->get();
	   //获得当前cid
	   $cid=Q('get.cid');
	   //获取当前cid的父id(pid)
	   $pid=$this->CategoryModel->where('cid',$cid)->pluck('pid');
	   
	   //分类页所有分类信息部分
	   //获取当前分类的父级分类，并查询出当前父级分类下的所有分类
		$CateByNowData=$this->CategoryModel->getCateByNowCid($data,$pid);
		$CateByNowData=array_reverse($CateByNowData);
		$CateByNowData[]=$this->CategoryModel->find($cid);
		$BigKey=max(array_keys($CateByNowData));
	    //分页列表中 分类子导航 点击【全部】的处理
	    $cidClon=$cid;
		if($pid!= 0){
			$TopCid=$this->CategoryModel->where('cid',$pid)->pluck('cid');
			$cidClon=$TopCid;
		}
		    View::with('TopCid',$cidClon);
		 //分页列表中 分类子导航 点击【全部】的处理
		
		View::with('BigKey',$BigKey);
		View::with('CateByNowData',$CateByNowData);
		
		//获取当前Cid所属分类的所有分类信息(分类页顶部分类展示)
		$Pcid=$this->CategoryModel->getAllCateByCid($data,$pid);
		if(!$Pcid) $Pcid=$cid; 
		$Pcids=$this->CategoryModel->getSonsCid($data,$Pcid);
		array_unshift($Pcids,$Pcid);
        $PcidsData=$this->CategoryModel->where("cid IN (".implode(',', $Pcids).")")->get();
		View::with('PcidsData',$PcidsData);
		//获取当前Cid所属分类的所有分类信息(分类页顶部分类展示)结束
		
	   
	   //1.通过当前分类的CID获取所有子集的cid
	   $cids=$this->CategoryModel->getSonsCid($data,$cid);
	   $cids[]=$cid;
	   //2、通过cid获得商品gid
	   $gids=$this->GoodsModel->getGids($cids);
	   //通过gids到goods_attr表查询属性
	   if($gids){
	   	  $goodsAttrs=$this->GoodsAttrModel->getGoodsAttr($gids);
		  
		  //把相同的taid的属性放在一起
		  $sameTemp=[];
		  foreach($goodsAttrs as $v){
		  	$sameTemp[$v['sc_type_attr_taid']][]=$v;
		  }
		  
		  //组合名字和值
		  $finalAttr=[];
		  foreach($sameTemp as $taid=>$v){
		  	$name=$this->TypeAttrModel->where('taid',$taid)->pluck('taname');
		  	$finalAttr[]=[
		  	     'name'=>"$name",
		  	     'value'=>$v
		  	     ];
		  } 
		  
		View::with('finalAttr',$finalAttr);
		 //筛选效果········································
		 //1、地址栏效果0_0_·····
		$num=count($finalAttr);
		$param=isset($_GET['param'])?explode('_', $_GET['param']):array_fill(0,$num,0);
		View::with("param",$param);
		//2、筛选操作，最终获得商品gid
		$finalGids=$this->filter($param,$gids);
        
		//根据商品gid，查询商品
	    $goodslistData=$this->GoodsModel->getGoodsListData($finalGids);
		   View::with('goodslistData',$goodslistData);
		//P($param);
		  
	   }else{
	   	  View::with('finalAttr',[]);
		  View::with('goodslistData',[]);
	   }

       View::make();
    }
    

    private function filter($param,$cidGids){
    	$gidArr=[];
		foreach($param as $gtid){
			//如果点击的不是“不限”的时候
			//根据gtid得到商品属性名称
			if($gtid){
				$gtvalue=$this->GoodsAttrModel->where('gtid',$gtid)->pluck('gtvalue');
			    $gidArr[]=$this->GoodsAttrModel->where('gtvalue',$gtvalue)->lists('sc_goods_gid');			
			}
		}
		//如果$gidArr有值的时候，也就是用户不是全部‘限制’
		if($gidArr){
		  $gid=$gidArr[0];
		  foreach($gidArr as $v){
		  	$gid=array_intersect($v, $gid);
		  }
		  
		  //因为$gid有可能是其他分类的gid,那么为了确保是当前分类，再次取交集
		  $finalGids=array_intersect($gid, $cidGids); 
		}else{//如果全部是“不限”的时候
		  $finalGids=$cidGids;
		}
        
        return $finalGids;
    }
	
	
	
}


?>